cssprovider: Have a private error variable
authorBenjamin Otte <otte@redhat.com>
Thu, 7 Apr 2011 10:38:53 +0000 (12:38 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 May 2011 19:58:43 +0000 (21:58 +0200)
gtk/gtkcssprovider.c

index 837ffcb446c094ef4cc94823d4eeac33f1666672..e1d676e227b826638958bdd4056161539d07418d 100644 (file)
@@ -801,6 +801,7 @@ struct _GtkCssProviderPrivate
   GSList *state;
   GSList *cur_selectors;
   GHashTable *cur_properties;
+  GError *error;
 };
 
 enum ParserScope {
@@ -1612,6 +1613,10 @@ css_provider_reset_parser (GtkCssProvider *css_provider)
                                                 g_str_equal,
                                                 (GDestroyNotify) g_free,
                                                 (GDestroyNotify) property_value_free);
+
+  if (priv->error)
+    g_error_free (priv->error);
+  priv->error = NULL;
 }
 
 static void
@@ -3540,10 +3545,9 @@ parse_stylesheet (GtkCssProvider  *css_provider,
   while (!g_scanner_eof (priv->scanner))
     {
       GTokenType expected_token;
-      GError *err = NULL;
 
       css_provider_reset_parser (css_provider);
-      expected_token = parse_rule (css_provider, priv->scanner, &err);
+      expected_token = parse_rule (css_provider, priv->scanner, &priv->error);
 
       if (expected_token != G_TOKEN_NONE)
         {
@@ -3553,8 +3557,8 @@ parse_stylesheet (GtkCssProvider  *css_provider,
           if (error != NULL)
             {
               result = FALSE;
-              if (err)
-                g_propagate_error (error, err);
+              if (priv->error)
+                g_propagate_error (error, priv->error);
               else
                 g_set_error_literal (error,
                                      GTK_CSS_PROVIDER_ERROR,
@@ -3564,8 +3568,9 @@ parse_stylesheet (GtkCssProvider  *css_provider,
             }
           else
             {
-              scanner_report_warning (css_provider, expected_token, err);
-              g_clear_error (&err);
+              scanner_report_warning (css_provider, expected_token, priv->error);
+              g_clear_error (&priv->error);
+              priv->error = NULL;
             }
 
           css_provider_reset_parser (css_provider);